package com.hqj.demo.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * Aop的切面
 */
public class LogAop {
    /**
     * 前置通知
     */
    public void beforeAdvice(){
        System.out.println("方法执行前执行的通知方法");
    }

    /**
     * 后置通知
     */
    public void afterAdvice(){
        System.out.println("方法执行后执行的通知方法");
    }

    /**
     * 返回值通知
     * @param obj
     */
    public void afterReturningAdvice(Object obj){
        System.out.println("有返回值方法执行后返回值为:"+obj);
    }

    /**
     * 方法异常通知
     * @param ex
     */
    public void afterThrowingAdvice(Throwable ex){
        System.out.println("方法执行发生的异常:"+ex);
    }

    /**
     * 方法的环绕
     * @param pjp
     * @return
     */
    public Object around(ProceedingJoinPoint pjp){
        System.out.println("方法的环绕通知开始");
        try {
            Object ret = pjp.proceed();
            System.out.println("方法的结果:"+ret);
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }

        return null;
    }

}
